package com.sky.d_lock_free;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 
 * @Author:hjt
 */
public class LockCoarsingDemo {
	private static AtomicInteger lock;

	//举个例子
	public void demoMethod_0(){ 
		synchronized(lock){ 
			//do sth. 
		} 
		//做其他不需要的同步的工作，但能很快执行完毕 
		synchronized(lock){ 
			//do sth. 
		} 
	}
	
	//这种情况，根据锁粗化的思想，应该合并
	public void demoMethod_1(){ 
		//整合成一次锁请求 
		synchronized(lock){ 
			//do sth. 
			//做其他不需要的同步的工作，但能很快执行完毕 
		}
	}
	
	//当然这是有前提的，前提就是中间的那些不需要同步的工作是很快执行完成的。
	
	//再举一个极端的例子
	public void demoMethod_2(){
		int CIRCLE = 99;
		for(int i=0;i<CIRCLE;i++){ 
			synchronized(lock){ 
				
			} 
		}
		
		//在一个循环内不同得获得锁。虽然JDK内部会对这个代码做些优化，但是还不如直接写成
		synchronized(lock){ 
			for(int i=0;i<CIRCLE;i++){ 
				
			} 
		}
		
		//当然如果有需求说，这样的循环太久，需要给其他线程不要等待太久，那只能写成上面那种。如果没有这样类似的需求，还是直接写成下面那种比较好
		
		
		
	}
	
	
}
